from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy import text

app = Flask(__name__)

# 主机名
HOSTNAME = "127.0.0.1"
# 端口号
PORT = 3306
# 用户名
USERNAME = "root"
# 密码
PASSWORD = "root"
# 数据库名
DATABASE = "flask_database"
app.config[
    "SQLALCHEMY_DATABASE_URI"] = f"mysql+pymysql://{USERNAME}:{PASSWORD}@{HOSTNAME}:{PORT}/{DATABASE}?charset=utf8"

db = SQLAlchemy(app)
"""
在 Flask 中，某些操作（如与数据库交互）需要在应用上下文（application context）中执行。app.app_context() 创建了一个应用上下文，使得你可以在该上下文内使用 current_app、g 等 Flask 变量，以及进行数据库操作。
with 语句确保上下文被正确设置并在执行完后自动释放，无需手动管理上下文的创建和销毁。
"""
with app.app_context():
    with db.engine.connect() as conn:
        """
        conn.execute(text("select 1")) 执行了一个简单的 SQL 查询 "select 1"。这个查询只返回一个值 1，通常用作检查数据库连接是否正常的测试查询。
        由于 SQLAlchemy 需要接收一个可执行的 SQL 对象，因此使用 text("select 1") 将字符串 SQL 转换为 SQLAlchemy 可理解的对象。
        """
        rs = conn.execute(text("select 1"))
        print(rs.fetchone())


@app.route('/')
def hello_world():  # put application's code here
    return 'Hello World!'


if __name__ == '__main__':
    app.run(debug=True)
